readabilityes

Cálculo reproducible de métricas de legibilidad en español

Jesica Formoso

CIIPME-CONICET

Sofía Ortiz

CIIPME-CONICET

Brenda Gomez Muiño

Facultad de Psicología | UBA

Juan Pablo Barreyro

CIIPME-CONICET

¡Hola!👋 Soy Jésica

  • Psicóloga cognitiva, Dra. por la Universidad de Buenos Aires (UBA)
  • Investigadora de CONICET en el Centro Interdisciplinario de Investigaciones en Psicología Matemática y Experimental (CIIPME)
  • Co-organzadora de R-Ladies Buenos Aires y parte de R-Ladies global
  • Coordinadora de medicición de impacto en MetaDocencia 🍎

Equipo

Juan Pablo Barreyro
Dr. en Psicología, UBA
Investigador Independiente
CONICET

Sofía Ortiz
Lic. en Psicología, UBA
Becaria doctoral
CONICET

Brenda Gomez Muiño
Lic. en Psicología, UBA


¿Qué es la legibilidad?

  • Propiedad del texto que indica la facilidad con la que este puede ser comprendido por quien lo lee (Flesch, 1974)

  • Qué tan rápidamente y con cuánta comodidad una persona puede procesar el contenido.

No tiene la misma dificultad una oración breve y directa…

La programadora revisó el código antes de enviar la actualización.

que una en voz pasiva…

El código fue revisado antes de la actualización por la programadora.

..o que una oración más larga, con palabras de menor frecuencia, y una clausula infinita.

Después de haber depurado minuciosamente el módulo, que presentaba varias inconsistencias lógicas, la programadora elaboró un informe detallado.

¿Qué hace que un texto sea más difícil?

  • Complejidad léxica:

    • Palabras de baja frecuencia
    • Palabras polisilábicas
    • Gran diversidad en las palabras utilizadas
  • Complejidad sintáctica:

    • Oraciones extensas
    • Presencia de subordinadas

Índices de legibilidad


  • Buscan representar el grado de dificultad lingüística del texto mediante un número que sea fácil de calcular.

  • Intentan asociar el número con un nivel de dificultad y un nivel educativo particular.

Fórmula de Perpicuidad de Szigriszt y escala INFLESZ



\[ I = 206.835 - 62.3 \cdot \frac{\text{sílabas}}{\text{palabras}} - \frac{\text{palabras}}{\text{oraciones}} \]

Fórmula de Perpicuidad de Szigriszt y escala INFLESZ


Después de haber depurado minuciosamente el módulo, que presentaba varias inconsistencias lógicas, la programadora elaboró un informe detallado.

  • Cantidad de oraciones: 1

  • Cantidad de palabras: 18

  • Cantidad de sílabas: 52

  • Índice Flesch-Szigriszt: 8.86

  • Grado de dificultad según escala INFLESZ: Muy difícil

Fórmula de Perpicuidad de Szigriszt y escala INFLESZ


La programadora revisó el código antes de enviar la actualización.

  • Cantidad de oraciones: 1

  • Cantidad de palabras: 10

  • Cantidad de sílabas: 24

  • Índice Flesch-Szigriszt: 47.32

  • Grado de dificultad según escala INFLESZ: Algo difícil

Fórmula de Perpicuidad de Szigriszt y escala INFLESZ


La veterinaria revisó al perrito antes de devolvérselo a la familia.

  • Cantidad de oraciones: 1

  • Cantidad de palabras: 11

  • Cantidad de sílabas: 26

  • Índice Flesch-Szigriszt: 48.58

  • Grado de dificultad según escala INFLESZ: Algo difícil

¿Para qué se utilizan los índices de legibilidad?

Permiten evaluar y adaptar textos que sean accesibles a audiencias con distintos niveles educativos o competencias lectoras.

Puede aplicarse en múltiples ámbitos:

  • Educación
  • Medicina y salud pública
  • Ámbito legal y administrativo
  • Comunicación científica y divulgación

readabilityes (en desarrollo)

Objetivos:

  • Tener una herramienta para calcular métricas de legibilidad tradicionales, que utilice silibificación mediante reglas propias del español, sin necesidad de dependencias externas ni modelos descargables.
  • Que facilite la reproducibilidad de los análisis.
  • Que se integre de forma fluida con el ecosistema tidyverse.

Dificultades para calcular legibilidad en español

  • Silabación: diptongos, triptongos, hiatos, vocales acentuadas, “y” vocálica.
  • Estructuras silábicas: grupos consonánticos, letras con diacríticos.
  • Ausencia de recursos libres fáciles de integrar en R.

Cómo abordé el problema en readabilityES

  • Motor de silabificación propio con reglas adaptadas al español.
  • Tokenización y segmentación de oraciones sin dependencias externas.
  • Funciones que devuelven métricas básicas y índices de legibilidad listos para análisis.

Caso de uso

library(readabilityes)
library(tidyverse)

txt <- c("El mercado agrícola local abrió hoy con precios estables, aunque los productores expresaron cierta incertidumbre por los recientes cambios climáticos. Aun así, la cosecha de la semana pasada mostró buenos rendimientos y despertó expectativas moderadamente optimistas.",
         "El parque del barrio estaba lleno de familias que disfrutaban del sol. Los niños corrían entre los juegos mientras los adultos charlaban tranquilamente en los bancos.")

segment_sentences(txt)
[[1]]
[1] "El mercado agrícola local abrió hoy con precios estables, aunque los productores expresaron cierta incertidumbre por los recientes cambios climáticos."
[2] "Aun así, la cosecha de la semana pasada mostró buenos rendimientos y despertó expectativas moderadamente optimistas."                                  

[[2]]
[1] "El parque del barrio estaba lleno de familias que disfrutaban del sol."                         
[2] "Los niños corrían entre los juegos mientras los adultos charlaban tranquilamente en los bancos."

palabras <- tokenize_words(txt)
palabras[[1]]
 [1] "el"            "mercado"       "agrícola"      "local"        
 [5] "abrió"         "hoy"           "con"           "precios"      
 [9] "estables"      "aunque"        "los"           "productores"  
[13] "expresaron"    "cierta"        "incertidumbre" "por"          
[17] "los"           "recientes"     "cambios"       "climáticos"   
[21] "aun"           "así"           "la"            "cosecha"      
[25] "de"            "la"            "semana"        "pasada"       
[29] "mostró"        "buenos"        "rendimientos"  "y"            
[33] "despertó"      "expectativas"  "moderadamente" "optimistas"   

count_syllables(txt)
[1] 90 51
count_sentences(txt, drop_empty = TRUE)
[1] 2 2
avg_syllables_per_word(txt)
[1] 2.500000 1.961538
inflesz(txt)
     score    category
1 33.08500 Muy difícil
2 71.63115       Fácil

df_txt <- data.frame(id_text = c("mercado_agricola", "parque_barrio"),
                  text = c("El mercado agrícola local abrió hoy con precios estables, aunque los productores expresaron cierta incertidumbre por los recientes cambios climáticos. Aun así, la cosecha de la semana pasada mostró buenos rendimientos y despertó expectativas moderadamente optimistas.",
         "El parque del barrio estaba lleno de familias que disfrutaban del sol. Los niños corrían entre los juegos mientras los adultos charlaban tranquilamente en los bancos."))

readability_summary(df_txt) %>% 
  mutate_if(is.numeric, round, 2)
# A tibble: 2 × 8
  id_text          n_words n_syllables n_sentences szigriszt_pazos inflesz_score
  <chr>              <dbl>       <dbl>       <dbl>           <dbl>         <dbl>
1 mercado_agricola      36          90           2            33.1          33.1
2 parque_barrio         26          51           2            71.6          71.6
# ℹ 2 more variables: inflesz_category <ord>, gutierrez_de_polini <dbl>

txt2 <- read_csv("textos.csv")

readability_summary(txt2) %>%
  mutate(inflesz_category = fct_relevel(inflesz_category, 
                                        "Muy fácil",
                                        "Normal",
                                        "Algo difícil",
                                        "Muy difícil")) %>%
  ggplot(aes(x = inflesz_category)) +
  geom_bar(fill = "#023e8a") +
  theme_minimal()

Próximos pasos

  • Incorporar análisis de vocabulario (frecuencia léxica).
  • Detección automática de pasivas y estructuras complejas.
  • Integración con anotadores gramaticales (udpipe).

Muchas gracias!

  • Links al paquete (GitHub) y contacto.